package com.obelisco.modelo.servicios.seguridad;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import com.obelisco.modelo.dao.hibernate.BitacoraDAO;
import com.obelisco.modelo.dao.hibernate.TipoEventoDAO;
import com.obelisco.modelo.data.Bitacora;
import com.obelisco.modelo.data.Grupo;
import com.obelisco.modelo.data.Sistema;
import com.obelisco.modelo.data.TipoEvento;
import com.obelisco.modelo.data.Transaccion;
import com.obelisco.modelo.data.Usuario;

public class ServicioAdministrarBitacora implements
		IServicioAdministrarBitacora {
	
	private Sistema sistema;

	private BitacoraDAO bitacoraDAO;

	private TipoEventoDAO tipoEventoDAO;

	public List<Bitacora> buscarBitacoras(TipoEvento evento, Date fechaInicio,
			Date fechaFin, String usuario, String fuente) {
		return bitacoraDAO.find(sistema, evento, fechaInicio, fechaFin, usuario,fuente);
	}

	public List<TipoEvento> buscarTiposEvento() {
		return tipoEventoDAO.loadAll();
	}

	public void guardarBitacora(Bitacora bitacora) {
		bitacoraDAO.save(bitacora);
	}

	public BitacoraDAO getBitacoraDAO() {
		return bitacoraDAO;
	}

	public void setBitacoraDAO(BitacoraDAO bitacoraDAO) {
		this.bitacoraDAO = bitacoraDAO;
	}

	public TipoEventoDAO getTipoEventoDAO() {
		return tipoEventoDAO;
	}

	public void setTipoEventoDAO(TipoEventoDAO tipoEventoDAO) {
		this.tipoEventoDAO = tipoEventoDAO;
	}

	public Sistema getSistema() {
		return sistema;
	}

	public void setSistema(Sistema sistema) {
		this.sistema = sistema;
	}

	public List<Bitacora> buscarBitacoras() {
		// TODO Auto-generated method stub
		return bitacoraDAO.loadAll(sistema);
	}

	public void registrarEjecucion(Usuario usuario, Transaccion t) {
		// TODO Auto-generated method stub
		TipoEvento tipo = tipoEventoDAO.findByPK(new Integer(3));

		Bitacora bitacora = new Bitacora();

		bitacora.setTipoevento(tipo);
		bitacora.setSistema(sistema);
		bitacora.setUsuario(usuario.getLogin());
		bitacora.setFuente(t.getNombre());
		bitacora.setFecha(Calendar.getInstance().getTime());
		
		bitacoraDAO.save(bitacora);

		
	}

	public void registrarEntrada(Usuario usuario) {
		// TODO Auto-generated method stub
		TipoEvento tipo = tipoEventoDAO.findByPK(new Integer(1));

		Bitacora bitacora = new Bitacora();

		bitacora.setTipoevento(tipo);
		bitacora.setSistema(sistema);
		bitacora.setUsuario(usuario.getLogin());
		bitacora.setFuente("Entrada al Sistema");
		bitacora.setFecha(Calendar.getInstance().getTime());
		
		bitacoraDAO.save(bitacora);
	}

	public void registrarLog(Usuario usuario, String fuente, String observaciones) {
		// TODO Auto-generated method stub

		TipoEvento tipo = tipoEventoDAO.findByPK(new Integer(3));

		Bitacora bitacora = new Bitacora();

		bitacora.setTipoevento(tipo);
		bitacora.setSistema(sistema);
		bitacora.setUsuario(usuario.getLogin());
		bitacora.setFuente(fuente);
		bitacora.setObservaciones(observaciones);
		bitacora.setFecha(Calendar.getInstance().getTime());

		bitacoraDAO.save(bitacora);
	}

	public void registrarSalida(Usuario usuario) {
		// TODO Auto-generated method stub
		TipoEvento tipo = tipoEventoDAO.findByPK(new Integer(2));
		
		Bitacora bitacora = new Bitacora();

		bitacora.setTipoevento(tipo);
		bitacora.setSistema(sistema);
		bitacora.setUsuario(usuario.getLogin());
		bitacora.setFuente("Salida del Sistema");
		bitacora.setFecha(Calendar.getInstance().getTime());
		
		bitacoraDAO.save(bitacora);

		
	}
	
	

}
